Quality assurance for event-driven applications—particularly applications with graphical user interfaces (GUIs) or ones designed for use in connection with the World Wide Web—is increasingly important. Event-driven applications are often difficult to test because they have large sets of possible user inputs. Current approaches to testing event-driven applications include live-subject testing, capture-replay, unit testing, crawling, and model-based testing. Live-subject testing and capture-replay approaches involve considerable manual work and require a tester to step through a set of use-case scenarios while clicking on buttons or links and entering data into forms displayed through an interface, such as a web browser supporting the event-driven application. While event-driven applications are often designed to constrain and guide a user through a set of scenarios, the set of all possible user inputs may be too large for manual testing. Unit test cases are generally designed to check one user event at a time and do not adequately address the checking of sequences of user events. Crawling techniques are typically designed to visit web pages automatically. However, without user guidance (e.g., the specification of user inputs), crawlers may be unable to visit all possible pages of an event-driven application. Model-based approaches generally rely on user specifications.